#include <CtrlLib/CtrlLib.h>

using namespace Upp;

class Test: public TopWindow{
public:
	typedef Test CLASSNAME;
	MenuBar menu;
	
	void Worker(){
		Progress pi("Working on many items at once...", 100*1000);
		std::atomic<int> ii(0);
		CoDo([&] {
			for(int i = ii++; i < 100; i = ii++) {
				for(int q = 0; q < 1000; q++) {
					if(pi.StepCanceled()) // ideally call Canceled every 1-10ms
						return;
					Sleep(1); // work simulation
				}
			}
		});
	}
	
	void MainMenu(Bar &bar){
		bar.Add("Process...", THISFN(Worker));
	}
	
	Test(){
		AddFrame(menu);
		menu.Set([=](Bar& bar) { MainMenu(bar); });
	}
};

GUI_APP_MAIN
{
	Test test;
	test.Run();
}
